﻿Public Class xtf_ABMunidad

    Dim ulg_row As DataRow
    Dim obj_Unidad As cls_unidad_ = Nothing
    Dim dtt_unidaddetalle_ As DataTable

    Public Sub New()
        InitializeComponent()
        AgregarValidaciones()

        'Prepara grid y datasource unidaddetalle----------------------------------------------------
        gdv_unidaddetalle_.Tag = New Collections.Generic.List(Of cls_unidaddetalle_)
        dtt_unidaddetalle_ = New DataTable
        dtt_unidaddetalle_.Columns.Add("Icono", GetType(Image))
        dtt_unidaddetalle_.Columns.Add("Nombre", GetType(String))
        dtt_unidaddetalle_.Columns.Add("Simbolo", GetType(String))
        dtt_unidaddetalle_.Columns.Add("Relacion1", GetType(Decimal))
        dtt_unidaddetalle_.Columns.Add("Relacion2", GetType(Decimal))
        dtt_unidaddetalle_.Columns.Add("Objeto", GetType(Object))

        gdc_unidaddetalle_.DataSource = dtt_unidaddetalle_
        gdc_unidaddetalle_.ForceInitialize()

        gdv_unidaddetalle_.PopulateColumns()
        gdv_unidaddetalle_.Columns("Objeto").Visible = False
        gdv_unidaddetalle_.Columns("Icono").ColumnEdit = New DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit
        gdv_unidaddetalle_.Columns("Icono").Caption = " "
        CType(gdv_unidaddetalle_.Columns("Icono").ColumnEdit, DevExpress.XtraEditors.Repository.RepositoryItemPictureEdit).NullText = " "
        gdv_unidaddetalle_.Columns("Icono").MaxWidth = 8
        '-----------------------------------------------------------------------------------------------

    End Sub

    Public Shadows Sub Nuevo(ByRef listado As Form)
        Try
            frm_listado = listado
            Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - Nuevo"
            obj_Unidad = New cls_Unidad_
            btn_Registro.Enabled = False
            Me.Show()
        Catch ex As Exception
            'Dim frmError As New frm_ErrorManager(ex.Message)
        End Try
    End Sub

    Public Shadows Sub Modificar(ByRef Unidad As cls_unidad_, ByRef listado As Form, ByRef row As DataRow)
        If IsNothing(obj_Unidad) Then
            obj_Unidad = New cls_Unidad_
        End If
        obj_Unidad = Unidad
        frm_listado = listado
        ulg_row = row : bbi_imprimir.Enabled = True

        Me.Text = CType(frm_listado, xtf_ListadoBase).lbl_modulo.Text & " - " & obj_Unidad.ToString
        txt_ID.Text = obj_Unidad.idUnidad
        txt_Nombre.Text = obj_Unidad.nombre
        txt_Descripcion.Text = obj_Unidad.descripcion
        'txt_Simbolo.Text = obj_Unidad.simbolo

        dtt_unidaddetalle_.Clear()
        gdv_unidaddetalle_.Tag.Clear()
        If Not IsNothing(obj_Unidad.unidaddetalle_) Then
            If Not IsNothing(obj_Unidad.unidaddetalle_.Items) Then
                For Each unidaddetalle As cls_unidaddetalle_ In obj_Unidad.unidaddetalle_.Items
                    Dim Item As DataRow = dtt_unidaddetalle_.NewRow
                    Item("Nombre") = unidaddetalle.nombre
                    Item("Simbolo") = unidaddetalle.simbolo
                    Item("Relacion1") = unidaddetalle.relacion1
                    Item("Relacion2") = unidaddetalle.relacion2
                    Item("Objeto") = unidaddetalle
                    If unidaddetalle.primario Then
                        Item("Icono") = imc_defecto.Images(0)
                    Else
                        Item("Icono") = Nothing
                    End If
                    dtt_unidaddetalle_.Rows.Add(Item)
                Next
            End If
        End If

        btn_Registro.Enabled = True
        obj_Unidad.unidaddetalle_ = Nothing
        Me.Show()

    End Sub

    Public Overrides Function ComprobarDatos() As Boolean
        Dim tmp_def As Boolean = False
        For Each row As DataRow In dtt_unidaddetalle_.Rows
            If CType(row("objeto"), cls_unidaddetalle_).primario Then
                tmp_def = True
            End If
        Next
        If tmp_def = False Then
            ErrManagerShow("001024", Me)
            Return False
        End If
        If Not ControlarValidaciones() Then
            ErrManagerShow("000004", Me)
            Return False
        End If
        Return True
    End Function

    Public Shadows Sub btn_Guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Guardar.Click
        If ComprobarDatos() Then
            obj_Unidad.nombre = txt_Nombre.Text
            obj_Unidad.descripcion = txt_Descripcion.Text

            'Guardo unidaddetalle_------------------------------------------------------
            If IsNothing(obj_Unidad.unidaddetalle_) Then
                obj_Unidad.unidaddetalle_ = New cls_unidaddetalle_
            End If
            If IsNothing(obj_Unidad.unidaddetalle_.Items) Then
                obj_Unidad.unidaddetalle_.Items = New Collections.Generic.List(Of cls_unidaddetalle_)
            End If
            obj_Unidad.unidaddetalle_.Items = New Collections.Generic.List(Of cls_unidaddetalle_)
            For Each Elemento As DataRow In dtt_unidaddetalle_.Rows
                obj_Unidad.unidaddetalle_.Items.Add(Elemento("Objeto"))
            Next
            For Each Elemento As cls_unidaddetalle_ In gdv_unidaddetalle_.Tag
                If Elemento.idunidaddetalle <> 0 Then
                    Elemento.Eliminar(Elemento.idunidaddetalle)
                End If
            Next
            '---------------------------------------------------------------------

            If txt_ID.Text = "" Then
                obj_Unidad.Nuevo(True)
                If frm_listado.Visible Then
                    ulg_row = CType(frm_listado, xtf_LISTADOunidad_).AgregarItem(obj_Unidad)
                End If
                Modificar(obj_Unidad, frm_listado, ulg_row)
            Else
                obj_Unidad.Modificar()
                If frm_listado.Visible Then
                    CType(frm_listado, xtf_LISTADOunidad_).ModificarItem(obj_Unidad, ulg_row)
                End If
                Modificar(obj_Unidad, frm_listado, ulg_row)
            End If
            flg_Modificado = False : btn_Guardar.Enabled = False : bbi_guardar.Enabled = False
        End If
    End Sub

    Private Sub btn_Registro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Registro.Click
        If Not IsNothing(obj_Unidad.registro) Then
            Dim ABMRegistro As New xtf_ABMRegistro(obj_Unidad.registro)
            If ABMRegistro.ShowDialog() = Windows.Forms.DialogResult.OK Then
                flg_Modificado = True
            End If
        End If
    End Sub


    Private Sub btn_Cerrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Cerrar.Click
        If flg_Modificado Then
            bol_comprobarCerrado = False
            Select Case ErrManagerShow("000001", Me)
                Case Windows.Forms.DialogResult.Yes
                    If ComprobarDatos() Then
                        btn_Guardar_Click(Nothing, Nothing)
                    Else
                        Exit Sub
                    End If
                Case Windows.Forms.DialogResult.Cancel : bol_comprobarCerrado = True
                    Exit Sub
            End Select
        End If
        Me.Dispose()
    End Sub

#Region "unidaddetalle"

    Private Sub tsb_unidaddetalleNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_unidaddetalleNuevo.Click
        Dim ABMunidaddetalle As New xtf_ABMunidaddetalle
        If ABMunidaddetalle.ShowDialog = Windows.Forms.DialogResult.OK Then
            gdv_unidaddetalle_.BeginDataUpdate()
            Dim Item As DataRow = dtt_unidaddetalle_.NewRow
            Item("Nombre") = ABMunidaddetalle.obj_unidaddetalle.nombre
            Item("Simbolo") = ABMunidaddetalle.obj_unidaddetalle.simbolo
            Item("Relacion1") = ABMunidaddetalle.obj_unidaddetalle.relacion1
            Item("Relacion2") = ABMunidaddetalle.obj_unidaddetalle.relacion2
            Item("Objeto") = ABMunidaddetalle.obj_unidaddetalle

            dtt_unidaddetalle_.Rows.Add(Item)
            gdv_unidaddetalle_.EndDataUpdate()
        End If
    End Sub

    Private Sub gdv_unidaddetalle__CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles gdv_unidaddetalle_.CustomUnboundColumnData
        e.Value = imc_defecto.Images 
    End Sub

    Private Sub gdv_unidaddetalle__DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles gdv_unidaddetalle_.DoubleClick
        Dim view As DevExpress.XtraGrid.Views.Grid.GridView = CType(sender, DevExpress.XtraGrid.Views.Grid.GridView)
        Dim pt As Point = view.GridControl.PointToClient(Control.MousePosition)
        gdv_unidaddetalle_DoRowDoubleClick(view, pt)
    End Sub

    Public Overridable Sub gdv_unidaddetalle_DoRowDoubleClick(ByVal view As DevExpress.XtraGrid.Views.Grid.GridView, ByVal pt As Point)
        Dim info As DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo = view.CalcHitInfo(pt)
        If info.InRow OrElse info.InRowCell Then
            Dim colCaption As String
            If info.Column Is Nothing Then
                colCaption = "N/A"
            Else
                colCaption = info.Column.GetCaption()
            End If
            tsb_unidaddetalleModificar.PerformClick()
        End If
    End Sub

    Private Sub tsb_unidaddetalleModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_unidaddetalleModificar.Click
        If gdv_unidaddetalle_.SelectedRowsCount > 0 Then
            Dim ABMunidaddetalle As New xtf_ABMunidaddetalle
            ABMunidaddetalle.Modificar(gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0))("objeto"))
            If ABMunidaddetalle.ShowDialog = Windows.Forms.DialogResult.OK Then
                gdv_unidaddetalle_.BeginDataUpdate()
                Dim Item As DataRow = gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0))
                Item("Nombre") = ABMunidaddetalle.obj_unidaddetalle.nombre
                Item("Simbolo") = ABMunidaddetalle.obj_unidaddetalle.simbolo
                Item("Relacion1") = ABMunidaddetalle.obj_unidaddetalle.relacion1
                Item("Relacion2") = ABMunidaddetalle.obj_unidaddetalle.relacion2
                Item("Objeto") = ABMunidaddetalle.obj_unidaddetalle
                gdv_unidaddetalle_.EndDataUpdate()
            End If
        End If
    End Sub

    Private Sub tsb_unidaddetalleEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_unidaddetalleEliminar.Click
        If gdv_unidaddetalle_.SelectedRowsCount > 0 Then
            gdv_unidaddetalle_.BeginDataUpdate()
            gdv_unidaddetalle_.Tag.add(gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0))("Objeto"))
            dtt_unidaddetalle_.Rows.Remove(gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0)))
            gdv_unidaddetalle_.EndDataUpdate()
        End If
    End Sub

#End Region

    Private Sub tsb_UnidadDefecto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsb_UnidadDefecto.Click
        If gdv_unidaddetalle_.SelectedRowsCount > 0 Then
            For Each row As DataRow In dtt_unidaddetalle_.Rows
                CType(row("objeto"), cls_unidaddetalle_).primario = False
                row("Icono") = Nothing
            Next
            CType(gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0))("Objeto"), cls_unidaddetalle_).primario = True
            gdv_unidaddetalle_.GetDataRow(gdv_unidaddetalle_.GetSelectedRows(0))("Icono") = imc_defecto.Images(0)
        End If
    End Sub
End Class